package Presentacion.ArticulosStock.ABMArticulos;

import java.awt.Checkbox;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.List;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.border.EmptyBorder;
import javax.swing.text.BadLocationException;

import Logica.Administracion.ABMIvaAlicuotaLogica;
import Logica.ArticulosStock.ABMArticulosLogica;
import Logica.ArticulosStock.ABMMarcasLogica;
import Logica.ArticulosStock.ABMRubrosLogica;
import Logica.BaseDeDatos.ABMFamiliaLogica;
import Logica.BaseDeDatos.ABMSubFamiliaLogica;
import Logica.Util.Validacion;
import Modelo.Articulo;
import Modelo.Familia;
import Modelo.IvaAlicuota;
import Modelo.Marca;
import Modelo.Marcas;
import Modelo.Rubros;

import org.eclipse.wb.swing.FocusTraversalOnArray;

import java.awt.Component;

public class ABMArticulos extends JFrame {

	private JPanel contentPane;
	private JTextField tfIDFamilia;
	private JTextField tfIDArticulo;
	private JTextField tfDescripcion;
	private JTextField tfDescripcionCorta;
	private JTextField tfCodigoBarra;
	private JTextField tfPrecioCosto;
	private JTextField tfPorcentajeUtilidad;
	private JTextField tfPrecioVenta;
	private JTextField tfMaxDescuento;
	private JTextField tfMayorIgualQue;
	private JTextField tfPrecioOferta;
	private JTextField tfMinimo;
	private JTextField tfMaximo;
	private JTextField tfUnidadesXPack;
	
	private JButton btnListarPrecios, btnGrabarActualizar, btnNuevoArticulo,
			btnUltimo, btnDerecho, btnBuscar, btnIzquierdo, btnPrimero, btnMarcas, 
			btnSubFamilia, btnFamilia, btnRubro, btnCodigoBarra, btnDescripcion;
	private Checkbox ckbEnviarABalanza, ckbArticuloPesable, ckbNoParaStock, ckbCombo;
	private JComboBox cbIVA, cbMarcas, cbSubFamilia, cbFamilia, cbRubro;
	
	private List<Articulo> list;
	private List<Familia> listFamilia;
	private List<Marca> listMarca;
	
	
	
	
	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					ABMArticulos frame = new ABMArticulos();
					
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public ABMArticulos() {
		setResizable(false);
		setTitle("Alta, Baja o Modificaci\u00F3n de Art\u00EDculos");
		this.setVisible(true);
//		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		/**Pregunto si al presionar la "X" esta seguro de que quiere cerrar la ventana.*/
		this.addWindowListener(new WindowAdapter() {
	           public void windowClosing(WindowEvent e) {
	        	   setDefaultCloseOperation(0); 
	        	   cerrarVentana();
	           }
	       });
		
		setBounds(100, 100, 660, 600);
		contentPane = new JPanel();
		contentPane.setBackground(new Color(192, 192, 192));
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JLabel lblDescripcionArt = new JLabel("Descripci\u00F3n del Art\u00EDculo");
		lblDescripcionArt.setFont(new Font("Tahoma", Font.BOLD, 14));
		lblDescripcionArt.setBounds(10, 11, 267, 27);
		contentPane.add(lblDescripcionArt);
		
		JSeparator separator1 = new JSeparator();
		separator1.setBounds(10, 34, 634, 7);
		contentPane.add(separator1);
		
		tfIDFamilia = new JTextField();
		tfIDFamilia.setEditable(false);
		tfIDFamilia.setToolTipText("Familia");
		tfIDFamilia.setHorizontalAlignment(SwingConstants.CENTER);
		tfIDFamilia.setFont(new Font("Tahoma", Font.PLAIN, 14));
		tfIDFamilia.setBounds(10, 68, 70, 25);
		contentPane.add(tfIDFamilia);
		tfIDFamilia.setColumns(10);
		
		tfIDArticulo = new JTextField();
		tfIDArticulo.setEditable(false);
		tfIDArticulo.setToolTipText("id Art\u00EDculo");
		tfIDArticulo.setHorizontalAlignment(SwingConstants.CENTER);
		tfIDArticulo.setFont(new Font("Tahoma", Font.PLAIN, 14));
		tfIDArticulo.setColumns(10);
		tfIDArticulo.setBounds(10, 40, 70, 25);
		contentPane.add(tfIDArticulo);
		
		JLabel lblDescripcin = new JLabel("Descripci\u00F3n");
		lblDescripcin.setFont(new Font("Dialog", Font.PLAIN, 13));
		lblDescripcin.setBounds(138, 40, 123, 14);
		contentPane.add(lblDescripcin);
		
		tfDescripcion = new JTextField();
		tfDescripcion.addFocusListener(new FocusAdapter() {			
			public void focusGained(FocusEvent arg0) {
				pintaVerde(tfDescripcion);
			}			
			public void focusLost(FocusEvent arg0) {
				pintaBlanco(tfDescripcion);
			}
		});
		tfDescripcion.setToolTipText("Descripci\u00F3n del art\u00EDculo");
		tfDescripcion.setBounds(88, 55, 492, 25);
		contentPane.add(tfDescripcion);
		tfDescripcion.setColumns(10);
		tfDescripcion.requestFocus();
		
		btnDescripcion = new JButton("");
		btnDescripcion.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				
			}
		});
		btnDescripcion.setToolTipText("Escribir");
		btnDescripcion.setIcon(new ImageIcon(ABMArticulos.class.getResource("/Presentacion/Img/escribir.png")));
		btnDescripcion.setBounds(584, 52, 32, 28);
		contentPane.add(btnDescripcion);
		
		JLabel lblDescripcionCorta = new JLabel("Descripci\u00F3n corta");
		lblDescripcionCorta.setFont(new Font("Dialog", Font.PLAIN, 13));
		lblDescripcionCorta.setBounds(90, 90, 123, 14);
		contentPane.add(lblDescripcionCorta);
		
		tfDescripcionCorta = new JTextField();
		tfDescripcionCorta.addFocusListener(new FocusAdapter() {			
			public void focusGained(FocusEvent arg0) {
				pintaVerde(tfDescripcionCorta);
			}			
			public void focusLost(FocusEvent arg0) {
				pintaBlanco(tfDescripcionCorta);
			}
		});
		tfDescripcionCorta.setToolTipText("Descripci\u00F3n corta");
		tfDescripcionCorta.setColumns(10);
		tfDescripcionCorta.setBounds(195, 84, 155, 25);
		contentPane.add(tfDescripcionCorta);
		
		JLabel lblCodigoDeBarra = new JLabel("C\u00F3digo de Barra");
		lblCodigoDeBarra.setFont(new Font("Tahoma", Font.BOLD, 14));
		lblCodigoDeBarra.setBounds(10, 115, 183, 27);
		contentPane.add(lblCodigoDeBarra);
		
		tfCodigoBarra = new JTextField();
		tfCodigoBarra.addFocusListener(new FocusAdapter() {			
			public void focusGained(FocusEvent arg0) {
				pintaVerde(tfCodigoBarra);
			}			
			public void focusLost(FocusEvent arg0) {
				pintaBlanco(tfCodigoBarra);
			}
		});
		tfCodigoBarra.setToolTipText("Descripci\u00F3n corta");
		tfCodigoBarra.setColumns(10);
		tfCodigoBarra.setBounds(133, 115, 447, 25);
		contentPane.add(tfCodigoBarra);
		
		btnCodigoBarra = new JButton("");
		btnCodigoBarra.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				
			}
		});
		btnCodigoBarra.setIcon(new ImageIcon(ABMArticulos.class.getResource("/Presentacion/Img/escribir.png")));
		btnCodigoBarra.setToolTipText("Escribir");
		btnCodigoBarra.setBounds(584, 114, 32, 28);
		contentPane.add(btnCodigoBarra);
		
		JLabel lblImagenArticulo = new JLabel("");
		lblImagenArticulo.setIcon(new ImageIcon(ABMArticulos.class.getResource("/Presentacion/Img/imagenNoDisponible2.jpg")));
		lblImagenArticulo.setToolTipText("Imagen");
		lblImagenArticulo.setBounds(10, 153, 130, 130);
		contentPane.add(lblImagenArticulo);
		
		JLabel lblRubro = new JLabel("Rubro:");
		lblRubro.setFont(new Font("Dialog", Font.PLAIN, 13));
		lblRubro.setHorizontalAlignment(SwingConstants.RIGHT);
		lblRubro.setBounds(165, 155, 80, 14);
		contentPane.add(lblRubro);
		
		JLabel lblFamilia = new JLabel("Familia:");
		lblFamilia.setFont(new Font("Dialog", Font.PLAIN, 13));
		lblFamilia.setHorizontalAlignment(SwingConstants.RIGHT);
		lblFamilia.setBounds(165, 180, 80, 14);
		contentPane.add(lblFamilia);
		
		JLabel lblSubFamilia = new JLabel("Sub Familia:");
		lblSubFamilia.setFont(new Font("Dialog", Font.PLAIN, 13));
		lblSubFamilia.setHorizontalAlignment(SwingConstants.RIGHT);
		lblSubFamilia.setBounds(165, 205, 80, 14);
		contentPane.add(lblSubFamilia);
		
		JLabel lblMarcas = new JLabel("Marcas:");
		lblMarcas.setFont(new Font("Dialog", Font.PLAIN, 13));
		lblMarcas.setHorizontalAlignment(SwingConstants.RIGHT);
		lblMarcas.setBounds(165, 230, 80, 14);
		contentPane.add(lblMarcas);
		
		cbRubro = new JComboBox();
		cbRubro.setBounds(255, 152, 220, 20);
		contentPane.add(cbRubro);
		
		cbFamilia = new JComboBox();
		cbFamilia.setBounds(255, 177, 220, 20);
		contentPane.add(cbFamilia);
		
		cbSubFamilia = new JComboBox();
		cbSubFamilia.setBounds(255, 202, 220, 20);
		contentPane.add(cbSubFamilia);
		
		cbMarcas = new JComboBox();
		cbMarcas.setBounds(255, 227, 220, 20);
		contentPane.add(cbMarcas);
		
		btnRubro = new JButton("");
		btnRubro.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				
			}
		});
		btnRubro.setIcon(new ImageIcon(ABMArticulos.class.getResource("/Presentacion/Img/escribirMini.png")));
		btnRubro.setBounds(480, 150, 32, 24);
		contentPane.add(btnRubro);
		
		btnFamilia = new JButton("");
		btnFamilia.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				
			}
		});
		btnFamilia.setIcon(new ImageIcon(ABMArticulos.class.getResource("/Presentacion/Img/escribirMini.png")));
		btnFamilia.setBounds(480, 175, 32, 24);
		contentPane.add(btnFamilia);
		
		btnSubFamilia = new JButton("");
		btnSubFamilia.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				
			}
		});
		btnSubFamilia.setIcon(new ImageIcon(ABMArticulos.class.getResource("/Presentacion/Img/escribirMini.png")));
		btnSubFamilia.setBounds(480, 201, 32, 24);
		contentPane.add(btnSubFamilia);
		
		btnMarcas = new JButton("");
		btnMarcas.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				
			}
		});
		btnMarcas.setIcon(new ImageIcon(ABMArticulos.class.getResource("/Presentacion/Img/escribirMini.png")));
		btnMarcas.setBounds(480, 226, 32, 24);
		contentPane.add(btnMarcas);
		
		JLabel lblValorizacionArticulo = new JLabel("Valorizaci\u00F3n del Art\u00EDculo");
		lblValorizacionArticulo.setFont(new Font("Tahoma", Font.BOLD, 14));
		lblValorizacionArticulo.setBounds(10, 281, 267, 27);
		contentPane.add(lblValorizacionArticulo);
		
		JSeparator separator2 = new JSeparator();
		separator2.setBounds(10, 304, 550, 7);
		contentPane.add(separator2);
		
		btnPrimero = new JButton("");
		btnPrimero.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				init(getFirst().getId());
			}
		});
		btnPrimero.setIcon(new ImageIcon(ABMArticulos.class.getResource("/Presentacion/Img/primero.png")));
		btnPrimero.setToolTipText("Principio");
		btnPrimero.setBounds(570, 150, 70, 70);
		contentPane.add(btnPrimero);
		
		btnIzquierdo = new JButton("");
		btnIzquierdo.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				init(getPre(Integer.parseInt(tfIDArticulo.getText())).getId());
			}
		});
		btnIzquierdo.setIcon(new ImageIcon(ABMArticulos.class.getResource("/Presentacion/Img/izquierda.png")));
		btnIzquierdo.setToolTipText("Anterior");
		btnIzquierdo.setBounds(570, 220, 70, 70);
		contentPane.add(btnIzquierdo);
		
		btnBuscar = new JButton("");
		btnBuscar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				buscar();
			}
		});
		btnBuscar.setIcon(new ImageIcon(ABMArticulos.class.getResource("/Presentacion/Img/binoculars.png")));
		btnBuscar.setToolTipText("Buscar");
		btnBuscar.setBounds(570, 290, 70, 70);
		contentPane.add(btnBuscar);
		
		btnDerecho = new JButton("");
		btnDerecho.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				init(getPos(Integer.parseInt(tfIDArticulo.getText())).getId());
			}
		});
		btnDerecho.setIcon(new ImageIcon(ABMArticulos.class.getResource("/Presentacion/Img/derecha.png")));
		btnDerecho.setToolTipText("Siguiente");
		btnDerecho.setBounds(570, 360, 70, 70);
		contentPane.add(btnDerecho);
		
		btnUltimo = new JButton("");
		btnUltimo.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				init(getLast().getId());
			}
		});
		btnUltimo.setIcon(new ImageIcon(ABMArticulos.class.getResource("/Presentacion/Img/ultimo.png")));
		btnUltimo.setToolTipText("Ultimo");
		btnUltimo.setBounds(570, 430, 70, 70);
		contentPane.add(btnUltimo);
		
		JLabel lblPrecioCosto = new JLabel("Precio Costo");
		lblPrecioCosto.setFont(new Font("Dialog", Font.PLAIN, 13));
		lblPrecioCosto.setHorizontalAlignment(SwingConstants.RIGHT);
		lblPrecioCosto.setBounds(10, 314, 80, 15);
		contentPane.add(lblPrecioCosto);
		
		JLabel lblPorcentajeUtilidad = new JLabel("<html><p>Porcentaje de</p>\r\n<p>utilidad</p></html>");
		lblPorcentajeUtilidad.setFont(new Font("Dialog", Font.PLAIN, 13));
		lblPorcentajeUtilidad.setHorizontalAlignment(SwingConstants.RIGHT);
		lblPorcentajeUtilidad.setBounds(10, 340, 80, 30);
		contentPane.add(lblPorcentajeUtilidad);
		
		JLabel lblPrecioVenta = new JLabel("Precio Venta");
		lblPrecioVenta.setFont(new Font("Dialog", Font.PLAIN, 13));
		lblPrecioVenta.setHorizontalAlignment(SwingConstants.RIGHT);
		lblPrecioVenta.setBounds(10, 375, 80, 14);
		contentPane.add(lblPrecioVenta);
		
		tfPrecioCosto = new JTextField();
		tfPrecioCosto.addFocusListener(new FocusAdapter() {			
			public void focusGained(FocusEvent arg0) {
				pintaVerde(tfPrecioCosto);
			}			
			public void focusLost(FocusEvent arg0) {
				pintaBlanco(tfPrecioCosto);
			}
		});
		tfPrecioCosto.setHorizontalAlignment(SwingConstants.CENTER);
		tfPrecioCosto.setBounds(103, 311, 85, 20);
		contentPane.add(tfPrecioCosto);
		tfPrecioCosto.setColumns(10);
		
		tfPorcentajeUtilidad = new JTextField();
		tfPorcentajeUtilidad.addFocusListener(new FocusAdapter() {			
			public void focusGained(FocusEvent arg0) {
				pintaVerde(tfPorcentajeUtilidad);
			}			
			public void focusLost(FocusEvent arg0) {
				pintaBlanco(tfPorcentajeUtilidad);
			}
		});
		tfPorcentajeUtilidad.setHorizontalAlignment(SwingConstants.CENTER);
		tfPorcentajeUtilidad.setForeground(new Color(255, 0, 0));
		tfPorcentajeUtilidad.setColumns(10);
		tfPorcentajeUtilidad.setBounds(103, 340, 85, 20);
		contentPane.add(tfPorcentajeUtilidad);
		
		tfPrecioVenta = new JTextField();
		tfPrecioVenta.addFocusListener(new FocusAdapter() {			
			public void focusGained(FocusEvent arg0) {
				pintaVerde(tfPrecioVenta);
			}			
			public void focusLost(FocusEvent arg0) {
				pintaBlanco(tfPrecioVenta);
			}
		});
		tfPrecioVenta.setHorizontalAlignment(SwingConstants.CENTER);
		tfPrecioVenta.setColumns(10);
		tfPrecioVenta.setBounds(103, 370, 85, 20);
		contentPane.add(tfPrecioVenta);
		
		JLabel lblMaxDescuento = new JLabel("Max Descuento");
		lblMaxDescuento.setFont(new Font("Dialog", Font.PLAIN, 13));
		lblMaxDescuento.setHorizontalAlignment(SwingConstants.RIGHT);
		lblMaxDescuento.setBounds(194, 312, 100, 15);
		contentPane.add(lblMaxDescuento);
		
		tfMaxDescuento = new JTextField();
		tfMaxDescuento.addFocusListener(new FocusAdapter() {			
			public void focusGained(FocusEvent arg0) {
				pintaVerde(tfMaxDescuento);
			}			
			public void focusLost(FocusEvent arg0) {
				pintaBlanco(tfMaxDescuento);
			}
		});
		tfMaxDescuento.setHorizontalAlignment(SwingConstants.CENTER);
		tfMaxDescuento.setColumns(10);
		tfMaxDescuento.setBounds(305, 309, 85, 20);
		contentPane.add(tfMaxDescuento);
		
		JLabel lblIVA = new JLabel("IVA");
		lblIVA.setFont(new Font("Dialog", Font.PLAIN, 13));
		lblIVA.setHorizontalAlignment(SwingConstants.RIGHT);
		lblIVA.setBounds(197, 345, 80, 15);
		contentPane.add(lblIVA);
		
		cbIVA = new JComboBox();
		cbIVA.setBounds(305, 340, 85, 20);
		contentPane.add(cbIVA);
		
		JLabel lblMayorIgualQue = new JLabel(">= que");
		lblMayorIgualQue.setFont(new Font("Dialog", Font.PLAIN, 13));
		lblMayorIgualQue.setBounds(411, 312, 46, 14);
		contentPane.add(lblMayorIgualQue);
		
		tfMayorIgualQue = new JTextField();
		tfMayorIgualQue.addFocusListener(new FocusAdapter() {			
			public void focusGained(FocusEvent arg0) {
				pintaVerde(tfMayorIgualQue);
			}			
			public void focusLost(FocusEvent arg0) {
				pintaBlanco(tfMayorIgualQue);
			}
		});
		tfMayorIgualQue.setHorizontalAlignment(SwingConstants.RIGHT);
		tfMayorIgualQue.setBounds(410, 327, 46, 20);
		contentPane.add(tfMayorIgualQue);
		tfMayorIgualQue.setColumns(10);
		
		JLabel lblPorcentaje = new JLabel("%");
		lblPorcentaje.setFont(new Font("Dialog", Font.PLAIN, 13));
		lblPorcentaje.setBounds(466, 330, 24, 14);
		contentPane.add(lblPorcentaje);
		
		JLabel lblPrecioOferta = new JLabel("Precio oferta");
		lblPrecioOferta.setFont(new Font("Dialog", Font.PLAIN, 13));
		lblPrecioOferta.setBounds(490, 312, 75, 14);
		contentPane.add(lblPrecioOferta);
		
		tfPrecioOferta = new JTextField();
		tfPrecioOferta.addFocusListener(new FocusAdapter() {			
			public void focusGained(FocusEvent arg0) {
				pintaVerde(tfPrecioOferta);
			}			
			public void focusLost(FocusEvent arg0) {
				pintaBlanco(tfPrecioOferta);
			}
		});
		tfPrecioOferta.setHorizontalAlignment(SwingConstants.RIGHT);
		tfPrecioOferta.setColumns(10);
		tfPrecioOferta.setBounds(489, 327, 60, 20);
		contentPane.add(tfPrecioOferta);
		
		JLabel lblUltimaCompra = new JLabel("Ultima compra:");
		lblUltimaCompra.setFont(new Font("Dialog", Font.PLAIN, 13));
		lblUltimaCompra.setBounds(207, 373, 110, 14);
		contentPane.add(lblUltimaCompra);
		
		JLabel lblFechaUltimaCompra = new JLabel("");
		lblFechaUltimaCompra.setBounds(315, 375, 85, 14);
		contentPane.add(lblFechaUltimaCompra);
		
		JLabel lblUltimaModificacion = new JLabel("Ultima modificaci\u00F3n:");
		lblUltimaModificacion.setFont(new Font("Dialog", Font.PLAIN, 13));
		lblUltimaModificacion.setBounds(207, 392, 120, 14);
		contentPane.add(lblUltimaModificacion);
		
		JLabel lblFechaUltimaModificacion = new JLabel("");
		lblFechaUltimaModificacion.setBounds(315, 394, 85, 14);
		contentPane.add(lblFechaUltimaModificacion);
		
		ckbCombo = new Checkbox("Este art\u00EDculo es un combo");
		ckbCombo.setBounds(10, 395, 152, 22);
		contentPane.add(ckbCombo);
		
		JSeparator separator3 = new JSeparator();
		separator3.setBounds(10, 438, 550, 7);
		contentPane.add(separator3);
		
		JLabel lblStockMaxMin = new JLabel("Stock M\u00E1ximo y M\u00EDnimo");
		lblStockMaxMin.setFont(new Font("Tahoma", Font.BOLD, 14));
		lblStockMaxMin.setBounds(10, 415, 267, 27);
		contentPane.add(lblStockMaxMin);
		
		JLabel lblMinimo = new JLabel("M\u00EDnimo:");
		lblMinimo.setFont(new Font("Dialog", Font.PLAIN, 13));
		lblMinimo.setHorizontalAlignment(SwingConstants.RIGHT);
		lblMinimo.setBounds(10, 450, 50, 15);
		contentPane.add(lblMinimo);
		
		tfMinimo = new JTextField();
		tfMinimo.addFocusListener(new FocusAdapter() {			
			public void focusGained(FocusEvent arg0) {
				pintaVerde(tfMinimo);
			}			
			public void focusLost(FocusEvent arg0) {
				pintaBlanco(tfMinimo);
			}
		});
		tfMinimo.setHorizontalAlignment(SwingConstants.CENTER);
		tfMinimo.setColumns(10);
		tfMinimo.setBounds(70, 447, 60, 20);
		contentPane.add(tfMinimo);
		
		JLabel lblMaximo = new JLabel("M\u00E1ximo:");
		lblMaximo.setFont(new Font("Dialog", Font.PLAIN, 13));
		lblMaximo.setHorizontalAlignment(SwingConstants.RIGHT);
		lblMaximo.setBounds(10, 475, 50, 14);
		contentPane.add(lblMaximo);
		
		tfMaximo = new JTextField();
		tfMaximo.addFocusListener(new FocusAdapter() {			
			public void focusGained(FocusEvent arg0) {
				pintaVerde(tfMaximo);
			}			
			public void focusLost(FocusEvent arg0) {
				pintaBlanco(tfMaximo);
			}
		});
		tfMaximo.setHorizontalAlignment(SwingConstants.CENTER);
		tfMaximo.setColumns(10);
		tfMaximo.setBounds(70, 470, 60, 20);
		contentPane.add(tfMaximo);
		
		JLabel lblUnidadesXPack = new JLabel("Unidades por pack");
		lblUnidadesXPack.setFont(new Font("Dialog", Font.PLAIN, 13));
		lblUnidadesXPack.setHorizontalAlignment(SwingConstants.LEFT);
		lblUnidadesXPack.setBounds(138, 450, 110, 14);
		contentPane.add(lblUnidadesXPack);
		
		tfUnidadesXPack = new JTextField();
		tfUnidadesXPack.addFocusListener(new FocusAdapter() {			
			public void focusGained(FocusEvent arg0) {
				pintaVerde(tfUnidadesXPack);
			}			
			public void focusLost(FocusEvent arg0) {
				pintaBlanco(tfUnidadesXPack);
			}
		});
		tfUnidadesXPack.setHorizontalAlignment(SwingConstants.CENTER);
		tfUnidadesXPack.setColumns(10);
		tfUnidadesXPack.setBounds(138, 470, 85, 20);
		contentPane.add(tfUnidadesXPack);
		
		ckbNoParaStock = new Checkbox("No considerar para Stock");
		ckbNoParaStock.setState(true);
		ckbNoParaStock.setBounds(338, 448, 170, 22);
		contentPane.add(ckbNoParaStock);
		
		ckbArticuloPesable = new Checkbox("Art\u00EDculo pesable");
		ckbArticuloPesable.setBounds(338, 470, 152, 22);
		contentPane.add(ckbArticuloPesable);
		
		ckbEnviarABalanza = new Checkbox("Enviar a balanzas");
		ckbEnviarABalanza.setBounds(338, 490, 152, 22);
		contentPane.add(ckbEnviarABalanza);
		
		btnNuevoArticulo = new JButton("Nuevo Art\u00EDculo");
		btnNuevoArticulo.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				nuevo();
			}
		});
		btnNuevoArticulo.setFont(new Font("Tahoma", Font.PLAIN, 14));
		btnNuevoArticulo.setBounds(10, 530, 150, 30);
		contentPane.add(btnNuevoArticulo);
		
		btnGrabarActualizar = new JButton("Grabar / Actualizar");
		btnGrabarActualizar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				grabarActualizar();
			}
		});
		btnGrabarActualizar.setFont(new Font("Tahoma", Font.PLAIN, 14));
		btnGrabarActualizar.setBounds(200, 530, 150, 30);
		contentPane.add(btnGrabarActualizar);
		
		btnListarPrecios = new JButton("Listar Precios");
		btnListarPrecios.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				
			}
		});
		btnListarPrecios.setFont(new Font("Tahoma", Font.PLAIN, 14));
		btnListarPrecios.setBounds(390, 530, 150, 30);
		contentPane.add(btnListarPrecios);
		setFocusTraversalPolicy(new FocusTraversalOnArray(new Component[]{tfDescripcion, btnDescripcion, tfDescripcionCorta, tfCodigoBarra, btnCodigoBarra, cbRubro, cbFamilia, cbSubFamilia, cbMarcas, btnRubro, btnFamilia, btnSubFamilia, btnMarcas, btnPrimero, btnIzquierdo, btnBuscar, btnDerecho, btnUltimo, tfPrecioCosto, tfPorcentajeUtilidad, tfPrecioVenta, tfMaxDescuento, cbIVA, tfMayorIgualQue, tfPrecioOferta, ckbCombo, tfMinimo, tfMaximo, tfUnidadesXPack, ckbNoParaStock, ckbArticuloPesable, ckbEnviarABalanza, btnNuevoArticulo, btnGrabarActualizar, btnListarPrecios}));
		
		this.init(getFirst().getId());
	}
	
	/*Metodo para confirma si esta seguro que quiere cerrar la aplicacinn*/	
	public void cerrarVentana(){
			this.dispose();					
	}
	
//  ** Pinto JTEXTFIELD de color   **  // 
	public void pintaVerde(JTextField tf){
		tf.setBackground(new Color(153, 255, 153));
	}
	
	public void pintaBlanco(JTextField tf){
		tf.setBackground(new Color(255, 255, 255));
	}
	
	
    public void initRubro(){
    	if(cbRubro.getItemCount() == 0){
    		List<Rubros>listRUBRO = null;
            listRUBRO = ABMRubrosLogica.getList();
            cbRubro.removeAllItems();
            for(int i = 0; i <listRUBRO.size(); i++) {
                    String a = listRUBRO.get(i).getNombre();
                    cbRubro.addItem(a); 
               } 
    	}else{    		
    	}        
        }
    
    public void initFAMILIA(){
    	if(cbFamilia.getItemCount() == 0){
    		List<Familia>listFAMILIA = null;
            listFAMILIA = ABMFamiliaLogica.getList();
            cbFamilia.removeAllItems();
            for(int i = 0; i <listFAMILIA.size(); i++) {
                    String a = listFAMILIA.get(i).getNombre();
                    cbFamilia.addItem(a); 
               } 
    	}else{    		
    	}        
        }
    
    public void initSUBFAMILIA(){
    	if(cbSubFamilia.getItemCount() == 0){    	
	        List<Marca>listSUBFAMILIA = null;
	        listSUBFAMILIA = ABMSubFamiliaLogica.getList();
	        cbSubFamilia.removeAllItems();
	        for(int i = 0; i <listSUBFAMILIA.size(); i++) {
	                String a = listSUBFAMILIA.get(i).getNombre();
	                cbSubFamilia.addItem(a); 
	           } 
    	}else{    		
    		}
        }
    
    public void initMARCAS(){
    	if(cbMarcas.getItemCount() == 0){    	
	        List<Marcas>listMARCAS = null;
	        listMARCAS = ABMMarcasLogica.getList();
	        cbMarcas.removeAllItems();
	        cbMarcas.addItem("");
	        for(int i = 0; i <listMARCAS.size(); i++) {
	                String a = listMARCAS.get(i).getNombre();
	                cbMarcas.addItem(a); 
         }
    	}else{
    	     }
    }
    
    public void initIVA(){
    	if(cbIVA.getItemCount() == 0){   	
	        List<IvaAlicuota>listIVA = null;
	        listIVA = ABMIvaAlicuotaLogica.getList();
	         
	        cbIVA.removeAllItems();
//	        cbIVA.addItem("");
	        for(int i = 0; i <listIVA.size(); i++) {
	                String a = listIVA.get(i).getValor().toString();
	                cbIVA.addItem(a); 
	           } 
    	}else{    		
    		}
        }
	
	
	public void init(int id){
			Articulo a = ABMArticulosLogica.getById(id);	
			
			//cargo los textfield
			tfIDArticulo.setText(Integer.toString(a.getId()));
			tfIDFamilia.setText(Integer.toString(a.getIdFamilia()));
			tfDescripcion.setText(a.getNombre());
			tfDescripcionCorta.setText(a.getCodigo());
			tfCodigoBarra.setText(a.getIdCodBar());
			
			//cargo los combobox
			this.initFAMILIA();
			cbFamilia.setSelectedItem(ABMFamiliaLogica.getById(a.getIdFamilia()).getNombre());
			this.initSUBFAMILIA();
			cbSubFamilia.setSelectedItem(ABMSubFamiliaLogica.getById(a.getIdMarca()).getNombre());
			this.initRubro();
			cbRubro.setSelectedItem(ABMRubrosLogica.getById(a.getIdRubros()).getNombre());
			this.initMARCAS();
			cbMarcas.setSelectedItem(ABMMarcasLogica.getById(a.getIdMarcas()).getNombre());
			
			//cargo los textfield
			tfPrecioCosto.setText(Double.toString(a.getCosto()));
			tfPorcentajeUtilidad.setText(Double.toString(a.getUtilidad()));
			tfPrecioVenta.setText(Double.toString(a.getPrecio()));
			if(a.getPrOferta()>0)
				tfPrecioOferta.setText(Double.toString(a.getPrOferta()));
			else
				tfPrecioOferta.setText("0");
			tfMaxDescuento.setText(Double.toString(a.getDescuento()));			
			//cargo los combobox
			this.initIVA();			
			//cargo los textfield
			tfMayorIgualQue.setText(Integer.toString(a.getMayorQue()));
						
			tfMinimo.setText(Integer.toString(a.getStockMin()));
			tfMaximo.setText(Integer.toString(a.getStockMax()));
			tfUnidadesXPack.setText(Integer.toString(a.getUb()));				
	}
	
	public Articulo getPos(int id){
		return ABMArticulosLogica.getPos(id);
	}	
	public Articulo getPre(int id){
		return ABMArticulosLogica.getPre(id);
	}
	public Articulo getLast(){
		return ABMArticulosLogica.getLast();
	}
	
	public Articulo getFirst(){
		return ABMArticulosLogica.getFirst();
	}
	
	public void buscar(){
		new BuscarArticulos(this);
	}
	
	public void grabarActualizar(){
		try {
			if(tfCodigoBarra.getText().length() == 0 || tfDescripcion.getText().length() == 0)
				throw new Exception();
			int id = ABMArticulosLogica.getById(Integer.parseInt(tfIDArticulo.getText())).getId();
			int count = ABMArticulosLogica.countByNom(tfDescripcion.getText());
			Articulo f = null;
			if (id == 0 && count == 0 ) //nuevo
				crear();
			else
				if(id == 0 && count == 1){
					JOptionPane.showMessageDialog(null, "No se pudo crear el articulo \n ERROR: Objeto existente",
							  "Error", JOptionPane.ERROR_MESSAGE);
				}else{
					modificar();
				}
					
			
//			if(id != 0 && count != 0){
//				f = ABMArticulosLogica.getByNom(tfDescripcion.getText());
//				if (id == f.getIdMarca())
//					modificar();
//				else
//					JOptionPane.showMessageDialog(null, "No se pudo modificar el articulo \n ERROR: Objeto existente",
//							  "Error", JOptionPane.ERROR_MESSAGE);
//			}
//				
//			if(id != 0 && count == 0)
//				modificar();
			
		} catch (Exception e) {
			JOptionPane.showMessageDialog(null, "No se pudo crear el articulo \n ERROR: al intentar grabar.",
					  "Error", JOptionPane.ERROR_MESSAGE);
			e.printStackTrace();
		}		
	}
	
	public void nuevo(){
		try {
			Articulo last = ABMArticulosLogica.getLast();
			Articulo obj;
			
			tfIDArticulo.setText(Integer.toString(last.getId() +1));
			tfCodigoBarra.setText("");
			tfDescripcion.setText("");
			tfIDFamilia.setText("");
			tfDescripcionCorta.setText("");	
			
			//cargo los combobox
			cbFamilia.setSelectedItem(0);
			cbSubFamilia.setSelectedItem(0);
			cbRubro.setSelectedItem(0);
			cbMarcas.setSelectedItem(0);
			cbIVA.setSelectedIndex(0);
			
			//cargo los textfield
			tfPrecioCosto.setText("0.0");
			tfPorcentajeUtilidad.setText("0.0");
			tfPrecioVenta.setText("0.0");
			tfMaxDescuento.setText("0.0");
			tfMayorIgualQue.setText("0");
			tfPrecioOferta.setText("0");			
			tfMinimo.setText("0");
			tfMaximo.setText("0");
			tfUnidadesXPack.setText("0");
					
		} catch (Exception e) {
			e.printStackTrace();
		}		
	}
	
	public Articulo asignar(){
		Articulo obj = new Articulo();
		this.validar();
		//textfield
		obj = ABMArticulosLogica.getById(Integer.parseInt(tfIDArticulo.getText()));
		System.out.println("nombre: "+obj.getNombre());
//		obj.setId(Integer.parseInt(tfIDArticulo.getText()));
		obj.setNombre(tfDescripcion.getText().toUpperCase());
		obj.setCodigo(tfDescripcionCorta.getText().toUpperCase());
		obj.setIdCodBar(tfCodigoBarra.getText());
		//combobox
		obj.setIdFamilia(ABMFamiliaLogica.getByNom(cbFamilia.getSelectedItem().toString()).getId());
		obj.setIdMarca(ABMSubFamiliaLogica.getByNom(cbSubFamilia.getSelectedItem().toString()).getId());
		obj.setIdRubros(ABMRubrosLogica.getByNom(cbRubro.getSelectedItem().toString()).getId());
		obj.setIdMarcas(ABMMarcasLogica.getByNom(cbMarcas.getSelectedItem().toString()).getIdMarcas());
		obj.setIva(ABMIvaAlicuotaLogica.getByValor(Float.parseFloat(cbIVA.getSelectedItem().toString())).getValor());
		//textfield
		obj.setCosto(Double.parseDouble(tfPrecioCosto.getText()));
		obj.setUtilidad(Double.parseDouble(tfPorcentajeUtilidad.getText()));
		obj.setPrecio(Double.parseDouble(tfPrecioVenta.getText()));
		obj.setDescuento(Double.parseDouble(tfMaxDescuento.getText()));
		obj.setMayorQue(Integer.parseInt(tfMayorIgualQue.getText()));
		obj.setPrOferta(Integer.parseInt(tfPrecioOferta.getText()));
		obj.setStockMin(Integer.parseInt(tfMinimo.getText()));
		obj.setStockMax(Integer.parseInt(tfMaximo.getText()));
		obj.setUb(Integer.parseInt(tfUnidadesXPack.getText()));		
		
		return obj;		
	}
	
	public void crear(){
//		Articulo obj = this.asignar();
		ABMArticulosLogica.crear(this.asignar());
	}
	
	public void modificar(){
//		Articulo obj = this.asignar();
		ABMArticulosLogica.modificar(this.asignar());
	}
	
	public void validar(){
		try {
		if (tfDescripcion.getText().length() == 0)
				tfDescripcion.setText("");
//		else 	tfDescripcion.setText(tfDescripcion.getText(0, 50));
		if(!Validacion.esNuM(tfIDArticulo.getText()))
			tfIDArticulo.setText("0");
		if(!Validacion.esNuM(tfIDFamilia.getText()))
			tfIDFamilia.setText("0");
		if (tfDescripcionCorta.getText().length() == 0)
			tfDescripcionCorta.setText("");
		else
//			try {
			if (tfDescripcionCorta.getText().length() > 10)
				tfDescripcionCorta.setText(tfDescripcionCorta.getText(0, 10));
			 
//			} catch (BadLocationException e) {				
//				e.printStackTrace();
//			}
		tfPrecioCosto.setText(Validacion.enReal(tfPrecioCosto.getText()));
		if(!Validacion.esReal(tfPrecioCosto.getText())){
			tfPrecioCosto.setText("0.00");
//		}else{
			
		}
		tfPorcentajeUtilidad.setText(Validacion.enReal(tfPorcentajeUtilidad.getText()));
		if(!Validacion.esReal(tfPorcentajeUtilidad.getText())){
			tfPorcentajeUtilidad.setText("0.00");
		}
		tfPrecioVenta.setText(Validacion.enReal(tfPrecioVenta.getText()));
		if(!Validacion.esReal(tfPrecioVenta.getText())){
			tfPrecioVenta.setText("0.00");
		}
		tfMaxDescuento.setText(Validacion.enReal(tfMaxDescuento.getText()));
		if(!Validacion.esReal(tfMaxDescuento.getText())){
			tfMaxDescuento.setText("0.00");
		}		
		if(!Validacion.esNuM(tfMayorIgualQue.getText()))	
			tfMayorIgualQue.setText("0");//
		if(!Validacion.esNuM(tfPrecioOferta.getText())){
			tfPrecioOferta.setText("0");
		}				
		if(!Validacion.esNuM(tfMinimo.getText()))	
			tfMinimo.setText("0");//		
		if(!Validacion.esNuM(tfMaximo.getText()))	
			tfMaximo.setText("0");//		
		if(!Validacion.esNuM(tfUnidadesXPack.getText()))	
			tfUnidadesXPack.setText("0");
		
		} catch (BadLocationException e) {				
		e.printStackTrace();
		}
	}
	
	

}
